package com.kehongborui.reflecttion;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 通过反射机制获取 Class 对象的方法
 */
public class RefMethodTest {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Class clazz = Class.forName("com.kehongborui.reflecttion.Student");  //
//        Method[] methods = clazz.getMethods();  // 获取所有 public 的方法
//        for (Method method : methods) {
//            System.out.println(method);
//        }
//
//        System.out.println("------------>");
//        Method[] declaredMethods = clazz.getDeclaredMethods();  // 获取所有的方法
//        for (Method method : declaredMethods) {
//            System.out.println(method);
//        }


        // 单独获取类方法，并使用
        Student student = new Student();
        student.setAge(16);

        Method getAge = clazz.getMethod("getAge");  // 通过方法获取指定方法
        System.out.println(getAge.invoke(student));

        Method setAge = clazz.getMethod("setAge", int.class);   // 获取 Student 类的 set 方法， 需要指定该方法的参数类型
        setAge.invoke(student, 10);  // 使用 setAge 方法对 student 对象的age 属性重新 赋值
        System.out.println(student.getAge());
    }
}
